/* 声明响应函数cb */

const effectStack = [];

function effect(cb) {
	// 对函数进行高阶封装
	const rxEffect = function () {
		// 1.捕获异常
		// 2.fn出栈入栈
		// 3.执行fn
		try {
			effectStack.push(rxEffect);
			return cb(); // cb 更新函数
		} finally {
			effectStack.pop();
		}
	};

	// 最初要执行一次,进行最初的依赖收集
	rxEffect();

	return rxEffect;
}
